package cn.xtcode.domain.tag.service;

import cn.xtcode.domain.tag.adapter.repository.ITagRepository;
import cn.xtcode.domain.tag.model.entity.CrowdTagsDetailEntity;
import cn.xtcode.domain.tag.model.entity.CrowdTagsJobEntity;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

/**
 * @Author xt-code
 * @Description:
 * @Create 2025/5/7 15:22
 */
@Slf4j
@Service
public class TagService implements ITagService {

    @Resource
    private ITagRepository tagRepository;

    @Override
    public void executeBatchJob(String tagId, String batchId) {
        log.info("人群标签批次任务 tagId:{} batchId:{}", tagId, batchId);

        //1.查询批次任务
        CrowdTagsJobEntity crowdTagsJobEntity = tagRepository.queryCrowdTagsJobEntity(tagId, batchId);

        //2.采集用户数据
        //这部分需要采集用户的消费类型数据，后续有用户发起拼单在处理
        //伪造用户数据
        List<String> userIdList = new ArrayList<>();
        userIdList.add("sht0001");
        userIdList.add("sht0002");
        userIdList.add("sht0003");

        // 3. 一般人群标签的处理在公司中，会有专门的数据数仓团队通过脚本方式写入到数据库，就不用这样一个个或者批次来写。
        //万一已经存在人了
        int newPeople = userIdList.size();
        for (String userId : userIdList) {
            CrowdTagsDetailEntity CrowdTagsDetailEntityRes = tagRepository.queryCrowdTagsDetailEntityByTagIdAndUserID(tagId, userId);
            if (CrowdTagsDetailEntityRes == null) {
                tagRepository.addCrowdTagsUserId(tagId, userId);
            }
            tagRepository.updateCrowdTagsUserId(tagId, userId);
            newPeople--;
        }

        // 5. 更新人群标签统计量
        tagRepository.updateCrowdTagsStatistics(tagId, newPeople);
    }
}
